import axios from 'axios'
import { ElMessage, ElMessageBox  } from 'element-plus'
// 创建axios实例
declare module "axios" {
    interface AxiosResponse<T = any> {
        code: number;
        // 这里追加你的参数
    }
    export function create(config?: AxiosRequestConfig): AxiosInstance;
}
const request = axios.create({
    baseURL: '/api',// 所有的请求地址前缀部分(没有后端请求不用写)
    timeout: 80000, // 请求超时时间(毫秒)
    withCredentials: true,// 异步请求携带cookie
    // headers: {
    // 设置后端需要的传参类型
    // 'Content-Type': 'application/json',
    // 'token': x-auth-token',//一开始就要token
    // 'X-Requested-With': 'XMLHttpRequest',
    // },
})

// request拦截器
request.interceptors.request.use(
    config => {
        // 如果你要去localStorage获取token,(如果你有)
        const token = localStorage.getItem("admin-token");
        if (token) {
        config.headers["token"]= token
        }
        return config
    },
    error => {
        // 对请求错误做些什么
        Promise.reject(error)
    }
)

// response 拦截器
request.interceptors.response.use(
    (response:any) => {
        const res= response.data
        if (res.code !== 200) {
            const errMsg = res.message || '请求失败'
            ElMessage.error(errMsg)
            // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
            return Promise.reject(new Error(errMsg))
        } else {
            if (res.data.error_code === 76005) {
                // to re-login
                ElMessageBox.confirm('Token已失效，是否重新登录', '确认登出', {
                    confirmButtonText: '重新登录',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => {
                    //清token reset
                    localStorage.removeItem('admin-token')
                })
            }
            return res
        }
    },
    error => {
        console.log({ error })
        // 对响应错误做点什么
        ElMessage({
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)
export default request
